<script setup lang="ts">
import {computed, ref} from 'vue'
import {StnDialog, TipMessageTypeConst, useTipStore} from 'st-ui-vue3-navie'
import {deleteUsers} from '@user'
import {useSysUserStore} from '../stores/sys-user-store'

const props = defineProps<{
  show: boolean
  ids: number[]
}>()

const emit = defineEmits<{
  (e: 'update:show', show: boolean): void
  (e: 'update:ids', ids: number[]): void
}>()

// 对话框是否显示
const dialogShow = computed({
  get: () => props.show,
  set: (show) => emit('update:show', show)
})

// 对话框是否为加载状态
const dialogLoading = ref(false)

/**
 * 删除用户信息
 */
const delUserInfo = async () => {
  // 设置对话框为加载状态
  dialogLoading.value = true
  // 发送请求删除用户信息
  const res = await deleteUsers(props.ids)
  // 删除失败
  if (!res.status) {
    useTipStore().message(res.message, TipMessageTypeConst.ERROR)
    dialogLoading.value = false
    return
  }
  // 删除成功
  useTipStore().message(res.message, TipMessageTypeConst.SUCCESS)
  // 重新获取用户列表
  await useSysUserStore().getUserDataByReq()
  // 关闭对话框
  dialogShow.value = false
  // 清空选中的用户 id 列表
  emit('update:ids', [])
  // 设置对话框为非加载状态
  dialogLoading.value = false
}

// 注册到全局
window.$showUserDelConfirm = (ids: number[]) => {
  emit('update:ids', ids)
  dialogShow.value = true
}
</script>

<template>
  <StnDialog
    v-model:show="dialogShow"
    title="删除用户"
    type="warning"
    :loading="dialogLoading"
    :on-confirm="delUserInfo"
  >
    <template #default>
      确定要删除选中的用户吗？
    </template>
  </StnDialog>
</template> 